iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 2
0
自我挑戰組

MySQL 學習筆記系列 第 2

MySQL 基本操作

  • 分享至 

  • xImage
  •  

前言

甲骨文創辦人演講
影片參考來源

「所有的人都告訴我,打造出關聯式資料庫是一個瘋狂的想法」
~ by Larry Ellison ~

MySQL的背景參考
因為十年前這瘋狂的想法,所以現在十年後地球的另一端有個人正瘋狂地想瞭解它/images/emoticon/emoticon05.gif


終端機操作 MySQL(MariaDB) 的基本指令

長期習慣了圖形介面的操作,接下來即將進入一段枯燥的流程。在資料海中找尋時,一段話突然跳出來:「資料庫是軟體從業人員的基本功」。正因為這段枯燥的流程,得以好好地瞭解資料庫、當年商場創世紀的腥風血雨、 MariaDB背後的感人故事,並將它納入基本功。

登入 MySQL (輸入帳密)

C:>mysql -u 使用者帳號 -p密碼

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.1.13-MariaDB mariadb.org binary distribution

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  • 開發時預設帳號是 root ,無密碼
  • 有的人可能會發現畫面上顯示的是 MariaDB ,相關的愛恨情仇、感人故事請參考 維基google

退出 MySQL

MariaDB [(none)]> exit
Bye

檢查資料庫版本

MariaDB [example]> SELECT VERSION();
+-----------------+
| VERSION()       |
+-----------------+
| 10.1.13-MariaDB |
+-----------------+
1 row in set (0.00 sec)

檢查目前登入的使用者

MariaDB [example]> SELECT USER();
+----------------+
| USER()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

顯示目前資料庫支援的儲存引擎

MariaDB [example]>SHOW ENGINES \G
  • 一般來說,最常使用的是 MyISAM 與 InnoDb

接下來是兩大主角:

庫 (database)

建立

create dateabase 名稱

選擇

use database 名稱

移除

drop database 名稱


資料表 (table)

建立資料表

  • 表名:users
  • 欄位:name,join_date
  • 資料型態:varchar(10),pdate
MariaDB [example]> create table users(name varchar(10), join_date date);
Query OK, 0 rows affected (0.06 sec)

查看資料表

MariaDB [example]> DESC users;
+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| name      | varchar(10) | YES  |     | NULL    |       |
| join_date | date        | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
2 rows in set (0.04 sec)
  • 比對上方的建立資料表指令,留意欄位相關訊息是可以在資料表建立時同時指定的。

查看更詳細的資訊

MariaDB [example]> SHOW CREATE TABLE users \G
*************************** 1. row ***************************
       Table: users
Create Table: CREATE TABLE `users` (
  `name` varchar(10) DEFAULT NULL,
  `join_date` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
  • \G 可以更詳細地列出資訊,顯示出來的畫面也比較好閱讀。
  • show可以查出最初建立資料的過程

刪除資料表

MariaDB [example]> DROP table users;
Query OK, 0 rows affected (0.02 sec)

清空資料表內資料

MariaDB [example]> DELETE FROM users;
Query OK, 3 rows affected (0.02 sec)

修改資料表

將 name 欄位調整為 varchar(20)

MariaDB [example]> ALTER TABLE users MODIFY name varchar(20);

Query OK, 0 rows affected (0.12 sec)
Records: 0  Duplicates: 0  Warnings: 0
  • 資料表建立後,欄位的特性還是可以做修改

驗證結果

MariaDB [example]> DESC users;

+-----------+-------------+------+-----+---------+-------+
| Field     | Type        | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| name      | varchar(20) | YES  |     | NULL    |       |
| join_date | date        | YES  |     | NULL    |       |
+-----------+-------------+------+-----+---------+-------+
2 rows in set (0.03 sec)
  • name 欄位的字元長度由 10 修改為 20 。

修改 null → not null

MariaDB [cy]> desc member2;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int(11)      | NO   | PRI | NULL    |       |
| account  | varchar(100) | YES  |     | NULL    |       |
| passwd   | varchar(255) | YES  |     | NULL    |       |
| realname | varchar(100) | YES  |     | NULL    |       |
| icon     | blob         | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
5 rows in set (0.024 sec)

MariaDB [cy]> alter table member2 modify column account varchar(100) not null;
Query OK, 0 rows affected (0.826 sec)
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [cy]> desc member2;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int(11)      | NO   | PRI | NULL    |       |
| account  | varchar(100) | NO   |     | NULL    |       |
| passwd   | varchar(255) | YES  |     | NULL    |       |
| realname | varchar(100) | YES  |     | NULL    |       |
| icon     | blob         | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
5 rows in set (0.015 sec)
  • account 欄位由允許存在 null 修改為不允許存在 null 。

增加 auto_increment

MariaDB [cy]> desc member2;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id       | int(11)      | NO   | PRI | NULL    |       |
| account  | varchar(100) | NO   |     | NULL    |       |
| passwd   | varchar(255) | YES  |     | NULL    |       |
| realname | varchar(100) | YES  |     | NULL    |       |
| icon     | blob         | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+
5 rows in set (0.015 sec)

MariaDB [cy]> alter table member2 modify id int auto_increment;
Query OK, 0 rows affected (0.999 sec)
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [cy]> desc member2;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| account  | varchar(100) | NO   |     | NULL    |                |
| passwd   | varchar(255) | YES  |     | NULL    |                |
| realname | varchar(100) | YES  |     | NULL    |                |
| icon     | blob         | YES  |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
5 rows in set (0.017 sec)

  • modify後面的 int 很容易忘記,需要經過幾次報錯訊息的提醒,才會比較熟悉。

變更欄位名稱,將 name 改名為 names

MariaDB [example]> ALTER TABLE users CHANGE name names varchar(10);

Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
  • change用來修改欄位名稱

變更資料表名稱,將 users 改名為 user

MariaDB [example]> ALTER TABLE users RENAME user;

Query OK, 0 rows affected (0.02 sec)
  • rename用來修改表名稱

資料表基本 CRUD

insert [C 新增資料內容]

MariaDB [example]> INSERT INTO user (`names`, `join_date`) VALUES('adam','2018-01-01');
Query OK, 1 row affected (0.00 sec)

select [R 讀取資料內容]

MariaDB [example]> SELECT * FROM user;
+-------+------------+
| names | join_date  |
+-------+------------+
| adam  | 2018-01-01 |
+-------+------------+
1 row in set (0.00 sec)

update [U 更新資料]

MariaDB [example]> UPDATE user SET names='Adam', join_date='2018-02-01' WHERE names='adam';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

delete [D 刪除資料]

MariaDB [example]> DELETE FROM user WHERE names='Adam';
Query OK, 1 row affected (0.00 sec)

最後讓我們再複習一次基本指令

登入

mysql -u root -p;

離開

exit

看看有哪些資料庫

show databases;

新建資料庫

create database database_name;

選擇資料庫

use database_name;

讀取資料庫內容

select database();

看看有哪些資料表

show tables;

新建資料表

create table table_name(id int, cname varchar(100), tel varchar(20), birthday date);

查看資料表

desc cust

讀取資料表

select * from table_name;

增加主鍵、主動遞增

create table tb1 ( id int primary key auto_increment,
    -> f1 varchar(10));

用垂直的方式顯示變數

show variables\G

輸入重導向

mysql -u root -p dbname < XXX.sql

備份表格(拿資料建立表格)

create table bk1 select * from students;

取資料用自訂欄位顯示

select cid myid, cname myname, cphone mypnone, csex mysex from bk1 order by csex;

新增 score欄、預設值0

 alter table bk1 add score int default 0;

  • 上方列出的指令只是冰山一角,圖形介面的工具有很多種,背後都離不開指令操作,掌握了基本的指令操作,可以幫助在不同的軟體、情境下,更快速地完成目標。
  • 在學習的過程中,有一些指令直接拿來應用在工作情境中會非常不合理,例如select * from XXX。操作資料庫的指令下得越明確越好,因為現在是使用範例資料庫所以無感,如果是萬筆的資料庫可能就可以稍微體會到差別了。
  • 有幾個新的指令可以先在腦海中有個印象,在接下來的練習範例中會用得上。

So far so good! Gear up! 準備遠征吧!


上一篇
第一類接觸
下一篇
MySQL 基本指令運用
系列文
MySQL 學習筆記8
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言